package org.ccay.manage.i18n.service;

import java.util.List;
import java.util.Map;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import org.ccay.core.base.BatchVO;
import org.ccay.core.base.PageVO;
import org.ccay.core.base.PagedResult;
import org.ccay.core.exception.ApplicationException;
import org.ccay.i18n.I18nVO;
import org.ccay.manage.enumerable.vo.EnumItemVO;
import org.ccay.security.annotation.SecurityBindingURL;
import org.ccay.security.annotation.SecurityOperation;
import org.ccay.security.annotation.SecurityResource;

/**
 * 国际化资源提示信息 管理service
 */
@Path("/")
@Produces("application/json")
@SecurityResource(code = "i18nManage", name = "系统管理|国际化信息管理")
public interface II18nManageService {

	@SecurityOperation(code = "page", name = "页面权限")
	@SecurityBindingURL("/manage/i18n/listI18n.html")
	String I18N_MANAGEMENT = "i18nManage";
	
	/**
	 * 定义导入权限点
	 */
	@SecurityOperation(code = "import", name = "导入")
	String I18N_MANAGEMENT_IMPORT = "i18nManageImport";
	
	
	/**
	 * 定义重新装载权限点
	 */
	@SecurityOperation(code = "reload", name = "重新加载")
	String I18N_MANAGEMENT_RELOAD = "i18nReload";


	/**
	 * 查找国际化资源数据
	 * 
	 * @since 2011-12-5
	 * @param queryI18n
	 * @return
	 */
	List<I18nVO> findI18nList(I18nVO queryI18n);

	/**
	 * 分页查找国际化资源数据
	 * 
	 * @since 2011-12-5
	 * @param queryI18n
	 * @param pageVO
	 * @return
	 */
	@GET
	@Path("list/page/{pageSize}/{curPage}")
	PagedResult<I18nVO> findPagedI18nList(@QueryParam("") I18nVO queryI18n, // 查询条件
			@PathParam("") PageVO pageVO // 分页信息
	);

	/**
	 * 创建国际化资源信息
	 * 
	 * @since 2011-12-5
	 * @param newI18n
	 * @return
	 */
	@SecurityOperation(code = "create", name = "创建国际化信息")
	int createI18n(I18nVO newI18n) throws ApplicationException;
	
	/**
	 * 批量创建国际化资源信息
	 * 
	 * @since 2011-12-5
	 * @param existedI18n
	 * @return
	 */
	@SecurityOperation(code = "create", name = "创建国际化信息")
	void createI18ns(List<I18nVO> newI18ns) throws ApplicationException;

	/**
	 * 更新国际化资源信息
	 * 
	 * @since 2011-12-5
	 * @param existedI18n
	 * @return
	 */
	@SecurityOperation(code = "update", name = "修改国际化信息")
	void updateI18n(I18nVO existedI18n) throws ApplicationException;

	/**
	 * 批量更新国际化资源信息
	 * 
	 * @since 2011-12-5
	 * @param existedI18n
	 * @return
	 */
	@SecurityOperation(code = "update", name = "修改国际化信息")
	void updateI18ns(List<I18nVO> existedI18ns) throws ApplicationException;

	/**
	 * 删除国际化资源信息
	 * 
	 * @since 2011-12-5
	 * @param existedI18n
	 * @return
	 */
	@SecurityOperation(code = "delete", name = "删除国际化信息")
	void deleteI18n(I18nVO existedI18n) throws ApplicationException;

	/**
	 * 批量删除国际化资源信息
	 * 
	 * @since 2011-12-5
	 * @param existedI18n
	 * @return
	 */
	@SecurityOperation(code = "delete", name = "删除国际化信息")
	void deleteI18ns(List<I18nVO> existedI18ns) throws ApplicationException;
	
	/**
	 * 查看国际化资源信息
	 * 
	 * @since 2011-12-5
	 * @param queryI18n
	 * @return
	 */
	I18nVO findI18n(I18nVO queryI18n) throws ApplicationException;

	
	/**
	 * 批量操作国际化资源信息校验
	 * @param batchItems
	 * @return
	 */
	@PUT
	@Path("/validateForBatch")
	Map<String, Object> validateForBatch(BatchVO<I18nVO> batchItems);
	
	/**
	 * 批量操作国际化资源信息
	 * 
	 * @since 2011-12-5
	 * @param batchItems
	 * @return
	 */
	@PUT
	@Path("/batch")
	void batchOperation(BatchVO<I18nVO> batchItems) throws ApplicationException;

	/**
	 * i18n页面导出
	 * 
	 * 
	 * @param i18nVO
	 * @param pageVO
	 * @throws ApplicationException
	 * @since 2014-03-27
	 */
	 @GET
	 @Path("export/{filterStr}")
	 @SecurityOperation(code = "export", name = "导出国际化信息")
	 public void exportI18n(@QueryParam("")I18nVO i18nVO,@PathParam("") PageVO
	 pageVO) throws ApplicationException;

	/**
	 * 滚动加载
	 * 
	 * @param queryI18n
	 * @param pageVO
	 * @param sort
	 * @param totalRows
	 * @return
	 */
	@POST
	@Path("list/range/{totalRows}/{startIndex}/{endIndex}")
	public PagedResult<I18nVO> findRangeI18nList(I18nVO queryI18n, @PathParam("") PageVO pageVO)
			throws ApplicationException;

	/**
	 * 过滤滚动加载
	 * 
	 * @param queryI18n
	 * @param pageVO
	 * @param sort
	 * @param totalRows
	 * @return
	 */
	@GET
	@Path("list/range/{totalRows}/{startIndex}/{endIndex}/{filterStr}")
	public PagedResult<I18nVO> findRangeI18nListFilter(@QueryParam("") I18nVO queryI18n, @PathParam("") PageVO pageVO)
			throws ApplicationException;
	
	@GET
	@Path("reload")
	public void reloadAll() throws ApplicationException;

}
